home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / JAVA / NET / PlainSocketImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  4.1 KB  |  227 lines

  1. package java.net;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileDescriptor;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8.  
  9. class PlainSocketImpl extends SocketImpl {
  10.    private static final int SOCKS_PROTO_VERS = 4;
  11.    private static final int SOCKS_REPLY_VERS = 4;
  12.    private static final int COMMAND_CONNECT = 1;
  13.    private static final int COMMAND_BIND = 2;
  14.    private static final int REQUEST_GRANTED = 90;
  15.    private static final int REQUEST_REJECTED = 91;
  16.    private static final int REQUEST_REJECTED_NO_IDENTD = 92;
  17.    private static final int REQUEST_REJECTED_DIFF_IDENTS = 93;
  18.    public static final String socksServerProp = "socksProxyHost";
  19.    public static final String socksPortProp = "socksProxyPort";
  20.    public static final String socksDefaultPortStr = "1080";
  21.  
  22.    protected synchronized void create(boolean var1) throws IOException {
  23.       super.fd = new FileDescriptor();
  24.       this.socketCreate(var1);
  25.    }
  26.  
  27.    protected void connect(String var1, int var2) throws UnknownHostException, IOException {
  28.       Object var3 = null;
  29.  
  30.       try {
  31.          InetAddress var4 = InetAddress.getByName(var1);
  32.  
  33.          try {
  34.             if (System.getProperty("socksProxyHost") != null) {
  35.                this.doSOCKSConnect(var4, var2);
  36.                return;
  37.             }
  38.  
  39.             this.doConnect(var4, var2);
  40.             return;
  41.          } catch (IOException var6) {
  42.             var3 = var6;
  43.          }
  44.       } catch (UnknownHostException var7) {
  45.          var3 = var7;
  46.       }
  47.  
  48.       this.socketClose();
  49.       throw var3;
  50.    }
  51.  
  52.    protected void connect(InetAddress var1, int var2) throws IOException {
  53.       super.port = var2;
  54.       super.address = var1;
  55.  
  56.       try {
  57.          if (System.getProperty("socksProxyHost") != null) {
  58.             this.doSOCKSConnect(var1, var2);
  59.          } else {
  60.             this.doConnect(var1, var2);
  61.          }
  62.       } catch (IOException var4) {
  63.          this.socketClose();
  64.          throw var4;
  65.       }
  66.    }
  67.  
  68.    private void connectToAddress(InetAddress var1, int var2) throws IOException {
  69.       if (System.getProperty("socksProxyHost") != null) {
  70.          this.doSOCKSConnect(var1, var2);
  71.       } else {
  72.          this.doConnect(var1, var2);
  73.       }
  74.    }
  75.  
  76.    private void doSOCKSConnect(InetAddress var1, int var2) throws IOException {
  77.       this.connectToSocksServer();
  78.       this.sendSOCKSCommandPacket(1, var1, var2);
  79.       int var3 = this.getSOCKSReply();
  80.       switch (var3) {
  81.          case 90:
  82.             return;
  83.          case 91:
  84.          case 92:
  85.             throw new SocketException("SOCKS server cannot conect to identd");
  86.          case 93:
  87.             throw new SocketException("User name does not match identd name");
  88.          default:
  89.       }
  90.    }
  91.  
  92.    private int getSOCKSReply() throws IOException {
  93.       InputStream var1 = this.getInputStream();
  94.       byte[] var2 = new byte[8];
  95.       if (var1.read(var2) != var2.length) {
  96.          throw new SocketException("Malformed reply from SOCKS server");
  97.       } else if (var2[0] != 0) {
  98.          throw new SocketException("Malformed reply from SOCKS server");
  99.       } else {
  100.          return var2[1];
  101.       }
  102.    }
  103.  
  104.    private void connectToSocksServer() throws IOException {
  105.       String var1 = System.getProperty("socksProxyHost");
  106.       if (var1 != null) {
  107.          InetAddress var2 = InetAddress.getByName(var1);
  108.          String var3 = System.getProperty("socksProxyPort", "1080");
  109.  
  110.          int var4;
  111.          try {
  112.             var4 = Integer.parseInt(var3);
  113.          } catch (Exception var5) {
  114.             throw new SocketException("Bad port number format");
  115.          }
  116.  
  117.          this.doConnect(var2, var4);
  118.       }
  119.    }
  120.  
  121.    private void doConnect(InetAddress var1, int var2) throws IOException {
  122.       ProtocolException var3 = null;
  123.       int var4 = 0;
  124.  
  125.       while(var4 < 3) {
  126.          try {
  127.             this.socketConnect(var1, var2);
  128.             return;
  129.          } catch (ProtocolException var6) {
  130.             this.socketClose();
  131.             super.fd = new FileDescriptor();
  132.             this.socketCreate(true);
  133.             var3 = var6;
  134.             ++var4;
  135.          } catch (IOException var7) {
  136.             this.socketClose();
  137.             throw var7;
  138.          }
  139.       }
  140.  
  141.       this.socketClose();
  142.       throw var3;
  143.    }
  144.  
  145.    private void sendSOCKSCommandPacket(int var1, InetAddress var2, int var3) throws IOException {
  146.       byte[] var4 = this.makeCommandPacket(var1, var2, var3);
  147.       OutputStream var5 = this.getOutputStream();
  148.       var5.write(var4);
  149.    }
  150.  
  151.    private byte[] makeCommandPacket(int var1, InetAddress var2, int var3) {
  152.       ByteArrayOutputStream var4 = new ByteArrayOutputStream(9);
  153.       var4.write(4);
  154.       var4.write(var1);
  155.       var4.write(var3 >> 8 & 255);
  156.       var4.write(var3 & 255);
  157.       byte[] var5 = var2.getAddress();
  158.       var4.write(var5, 0, var5.length);
  159.       String var6 = System.getProperty("user.name");
  160.       byte[] var7 = new byte[var6.length()];
  161.       var6.getBytes(0, var6.length(), var7, 0);
  162.       var4.write(var7, 0, var7.length);
  163.       var4.write(0);
  164.       return var4.toByteArray();
  165.    }
  166.  
  167.    private boolean usingSocks() {
  168.       return System.getProperty("socksProxyHost") != null;
  169.    }
  170.  
  171.    protected synchronized void bind(InetAddress var1, int var2) throws IOException {
  172.       this.socketBind(var1, var2);
  173.    }
  174.  
  175.    protected synchronized void listen(int var1) throws IOException {
  176.       this.socketListen(var1);
  177.    }
  178.  
  179.    protected synchronized void accept(SocketImpl var1) throws IOException {
  180.       this.socketAccept(var1);
  181.    }
  182.  
  183.    protected synchronized InputStream getInputStream() throws IOException {
  184.       return new SocketInputStream(this);
  185.    }
  186.  
  187.    protected synchronized OutputStream getOutputStream() throws IOException {
  188.       return new SocketOutputStream(this);
  189.    }
  190.  
  191.    protected synchronized int available() throws IOException {
  192.       return this.socketAvailable();
  193.    }
  194.  
  195.    protected synchronized void close() throws IOException {
  196.       if (super.fd != null) {
  197.          this.socketClose();
  198.       }
  199.  
  200.    }
  201.  
  202.    protected synchronized void finalize() throws IOException {
  203.       if (super.fd != null) {
  204.          this.socketClose();
  205.       }
  206.  
  207.    }
  208.  
  209.    private native void socketCreate(boolean var1) throws IOException;
  210.  
  211.    private native void socketConnect(InetAddress var1, int var2) throws IOException;
  212.  
  213.    private native void socketBind(InetAddress var1, int var2) throws IOException;
  214.  
  215.    private native void socketListen(int var1) throws IOException;
  216.  
  217.    private native void socketAccept(SocketImpl var1) throws IOException;
  218.  
  219.    private native int socketAvailable() throws IOException;
  220.  
  221.    private native void socketClose() throws IOException;
  222.  
  223.    static {
  224.       System.loadLibrary("net");
  225.    }
  226. }
  227.